package com.investment.advisor.repository;

import com.investment.advisor.entity.Fund;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface FundRepository extends JpaRepository<Fund, Long> {

    // 根据基金代码查找
    Optional<Fund> findByCode(String code);

    // 根据基金名称精确查找
    Fund findByName(String name);

    // 根据基金名称模糊查询
    List<Fund> findByNameContaining(String name);

    // 根据基金类型查询
    List<Fund> findByType(String type);

    // 根据评级查询
    List<Fund> findByRatingGreaterThanEqual(Integer rating);

    // 根据类型和评级查询
    List<Fund> findByTypeAndRatingGreaterThanEqual(String type, Integer rating);

    // 根据基金经理查询
    List<Fund> findByManager(String manager);

    // 根据基金公司查询
    List<Fund> findByCompany(String company);

    // 自定义查询：查找特定标签的基金
    @Query("SELECT f FROM Fund f JOIN f.tags t WHERE t.name = ?1")
    List<Fund> findByTagName(String tagName);

    // 自定义查询：根据年化收益率排序（降序）
    @Query("SELECT f FROM Fund f ORDER BY f.yearlyReturn DESC")
    List<Fund> findAllOrderByYearlyReturnDesc();

    // 自定义查询：查找收益率高于指定值的基金
    @Query("SELECT f FROM Fund f WHERE f.yearlyReturn >= ?1")
    List<Fund> findByYearlyReturnGreaterThanEqual(Double yearlyReturn);
} 